/**
 * JavaScript API调用示例
 * 
 * 本文件包含所有API接口的完整调用示例
 * 支持原生Fetch API和Axios两种方式
 */

// ========== 配置 ==========
const API_BASE_URL = 'http://localhost:8080/api/users';

// ========== 方式一：使用原生Fetch API ==========

/**
 * 创建用户
 * @param {Object} userData - 用户数据
 * @param {string} userData.username - 用户名
 * @param {string} userData.email - 邮箱
 * @param {string} userData.password - 密码
 * @returns {Promise<Object>} 创建的用户对象
 */
async function createUser(userData) {
    try {
        const response = await fetch(API_BASE_URL, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(userData)
        });
        
        const result = await response.json();
        
        if (result.code === 200) {
            console.log('✅ 创建成功:', result.data);
            return result.data;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('❌ 创建失败:', error.message);
        throw error;
    }
}

/**
 * 查询所有用户
 * @returns {Promise<Array>} 用户列表
 */
async function getAllUsers() {
    try {
        const response = await fetch(API_BASE_URL);
        const result = await response.json();
        
        if (result.code === 200) {
            console.log('✅ 查询成功，共', result.data.length, '个用户');
            return result.data;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('❌ 查询失败:', error.message);
        throw error;
    }
}

/**
 * 根据ID查询用户
 * @param {number} id - 用户ID
 * @returns {Promise<Object>} 用户对象
 */
async function getUserById(id) {
    try {
        const response = await fetch(`${API_BASE_URL}/${id}`);
        const result = await response.json();
        
        if (result.code === 200) {
            console.log('✅ 查询成功:', result.data);
            return result.data;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('❌ 查询失败:', error.message);
        throw error;
    }
}

/**
 * 根据用户名查询用户
 * @param {string} username - 用户名
 * @returns {Promise<Object>} 用户对象
 */
async function getUserByUsername(username) {
    try {
        const encodedUsername = encodeURIComponent(username);
        const response = await fetch(`${API_BASE_URL}/username/${encodedUsername}`);
        const result = await response.json();
        
        if (result.code === 200) {
            console.log('✅ 查询成功:', result.data);
            return result.data;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('❌ 查询失败:', error.message);
        throw error;
    }
}

/**
 * 更新用户
 * @param {number} id - 用户ID
 * @param {Object} userData - 更新的用户数据
 * @returns {Promise<Object>} 更新后的用户对象
 */
async function updateUser(id, userData) {
    try {
        const response = await fetch(`${API_BASE_URL}/${id}`, {
            method: 'PUT',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(userData)
        });
        
        const result = await response.json();
        
        if (result.code === 200) {
            console.log('✅ 更新成功:', result.data);
            return result.data;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('❌ 更新失败:', error.message);
        throw error;
    }
}

/**
 * 删除用户
 * @param {number} id - 用户ID
 * @returns {Promise<boolean>} 是否删除成功
 */
async function deleteUser(id) {
    try {
        const response = await fetch(`${API_BASE_URL}/${id}`, {
            method: 'DELETE'
        });
        
        const result = await response.json();
        
        if (result.code === 200) {
            console.log('✅ 删除成功');
            return true;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('❌ 删除失败:', error.message);
        throw error;
    }
}

// ========== 方式二：使用Axios ==========

// 如果使用Axios，需要先安装: npm install axios

/*
import axios from 'axios';

const api = axios.create({
    baseURL: API_BASE_URL,
    headers: {
        'Content-Type': 'application/json'
    }
});

// 创建用户
async function createUserAxios(userData) {
    try {
        const response = await api.post('', userData);
        if (response.data.code === 200) {
            return response.data.data;
        }
        throw new Error(response.data.message);
    } catch (error) {
        if (error.response) {
            throw new Error(error.response.data.message);
        }
        throw error;
    }
}

// 查询所有用户
async function getAllUsersAxios() {
    const response = await api.get('');
    return response.data.data;
}

// 查询指定用户
async function getUserByIdAxios(id) {
    const response = await api.get(`/${id}`);
    return response.data.data;
}

// 更新用户
async function updateUserAxios(id, userData) {
    const response = await api.put(`/${id}`, userData);
    return response.data.data;
}

// 删除用户
async function deleteUserAxios(id) {
    const response = await api.delete(`/${id}`);
    return response.data.code === 200;
}
*/

// ========== 完整使用示例 ==========

async function runExamples() {
    console.log('========== 开始API测试 ==========\n');
    
    try {
        // 1. 创建用户
        console.log('1. 创建用户...');
        const newUser = await createUser({
            username: 'johndoe',
            email: 'john@example.com',
            password: 'password123'
        });
        console.log('   新用户ID:', newUser.id, '\n');
        
        // 2. 查询所有用户
        console.log('2. 查询所有用户...');
        const allUsers = await getAllUsers();
        console.log('   共有', allUsers.length, '个用户\n');
        
        // 3. 查询指定用户
        console.log('3. 查询指定用户...');
        const user = await getUserById(newUser.id);
        console.log('   用户信息:', user.username, '-', user.email, '\n');
        
        // 4. 根据用户名查询
        console.log('4. 根据用户名查询...');
        const userByName = await getUserByUsername('johndoe');
        console.log('   找到用户:', userByName.username, '\n');
        
        // 5. 更新用户
        console.log('5. 更新用户...');
        const updatedUser = await updateUser(newUser.id, {
            username: 'johndoe2',
            email: 'john2@example.com',
            password: 'newpassword123'
        });
        console.log('   更新后:', updatedUser.username, '\n');
        
        // 6. 删除用户
        console.log('6. 删除用户...');
        await deleteUser(newUser.id);
        console.log('   删除完成\n');
        
        console.log('========== API测试完成 ==========');
        
    } catch (error) {
        console.error('❌ 测试过程中出现错误:', error.message);
    }
}

// 在浏览器控制台或Node.js中运行
// runExamples();

// ========== 导出函数（如果使用模块化） ==========
if (typeof module !== 'undefined' && module.exports) {
    module.exports = {
        createUser,
        getAllUsers,
        getUserById,
        getUserByUsername,
        updateUser,
        deleteUser,
        runExamples
    };
}

